import router from '@/router';
import store from './store';
import NProgress from 'nprogress'; // 引入一份进度条插件
import 'nprogress/nprogress.css'; // 引入进度条样式

const whiteList = ['/login', '/404'];

//  全局前置导航守卫
router.beforeEach(async (to, from, next) => {
  NProgress.start();
  if (store.getters.token) {
    if (to.path === '/login') {
      next('/');
    } else {
      // 如果有token 并且没有获取用户资料
      if (!store.getters.userId) {
        // 触发调用action里的方法 getUserInfo,这里是获取用户资料的接口，里面有该用户的权限标识，menus
        const res = await store.dispatch('user/getUserInfo');
        // 拿到用户的动态权限路由
        const routes = await store.dispatch('permission/filterRoutes', res.roles.menus);
        // 将该用户的权限路由 添加到路由表里
        router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }]);
        next(to.path);
      }
      next();
    }
  } else {
    if (whiteList.indexOf(to.path) > -1) {
      next();
    } else {
      next('/login');
    }
  }

  NProgress.done();
});

// 全局导航后置钩子
router.afterEach(() => {
  NProgress.done(); // 关闭进度条
});
